package com.example.memcache.util;

import net.spy.memcached.MemcachedClient;
import net.spy.memcached.internal.OperationFuture;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * Created by liulanhua on 2018/2/8.
 */
public class MemcachedUtil {

    /**
     * memcached客户端单例，唯一实例
     */
    @Autowired
    private static MemcachedClient cachedClient ;

     /**
     * 构造函数:工具类，禁止实例化
     */
    private MemcachedUtil() {
    }

    /***
     * 功能描述:新增一个缓存数据，如果key存在不会新增
     *
     */
    public static OperationFuture<Boolean> add(String key, Object value) {
        return cachedClient.add(key, 0, value);
    }

    /**
     * 功能描述:新增一个缓存数据，设置过期时间参数为秒
     */
    public static OperationFuture<Boolean> add(String key, Object value, Integer expire) {
        return cachedClient.add(key, expire, value);
    }

    /**
     * 功能描述:新增一个缓存数据，如果存在key，则更新该key的值
     */
    public static OperationFuture<Boolean> put(String key, Object value) {
        return cachedClient.set(key, 0,value);
    }

    /**
     * 功能描述:新增一个缓存数据，如果存在key，则更新该key的值
     */
    public static OperationFuture<Boolean> put(String key, Object value, Integer expire) {
        return cachedClient.set(key, expire, value);
    }

    /**
     * 功能描述:替换一个缓存数据，如果存在key则替换，否则返回false
     * @param key
     * @param value
     * @return 操作结果
     */
    public static OperationFuture<Boolean> replace(String key, Object value) {
        return cachedClient.replace(key, 0, value);
    }

    /**
     * 功能描述:替换一个缓存数据，如果存在key则替换，否则返回false
     * @param key
     * @param value
     * @return 操作结果
     */
    public static OperationFuture<Boolean> replace(String key, Object value, Integer expire) {
        return cachedClient.replace(key, expire, value);
    }

    /**
     * 功能描述:向key的内容追加value
     * @param key
     * @param value
     * @return
     */
    public static OperationFuture<Boolean> append(String key, Object value) {
        return cachedClient.append(key, value);
    }

    /**
     * 功能描述:在key的内容前面加value
     * @param key
     * @param value
     * @return
     */
    public static OperationFuture<Boolean> prepend(String key, Object value) {
        return cachedClient.prepend(key, value);
    }

    /**
     * 功能描述:根据key得到一个缓存数据
     * @param key
     * @return 操作结果
     */
    public static Object get(String key) {
        return cachedClient.get(key);
    }

    /**
     * 功能描述:刷新全部缓存(就是将所有缓存设置为过期，以后放入的会覆盖掉这些过期的缓存数据)
     *
     * @return 操作结果
     */
    public static OperationFuture<Boolean> flushAll() {
        return cachedClient.flush();
    }

    /***
     * 功能描述:根据key删除一个缓存数据
     * @return 操作结果
     */
    public static OperationFuture<Boolean> delete(String key){
        return cachedClient.delete(key);
    }

}
